/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controller;

import java.util.List;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import modelo.Cancelacion;
import modelo.Recurso;
import modelo.Reserva;
import modelo.Usoretiro;

/**
 *
 * @author Toshiba
 */
public interface ReservaControllerInterface {

    /**
     * Función que Almacena (crea) la Reserva Representada.
     * (Guardar Reserva).
     * @return String
     */
    String create();

    /**
     * Función de Navegación a la Pagina New.jsp
     * @return String
     */
    String createSetup();

    /**
     * Función de Navegación a la Pagina Detail.jsp
     * @return String
     */
    String detailSetup();

    /**
     * Función que almacena los cambios realizados sobre la
     * Reserva Representada. Esta relacionada a la reasignación
     * Recursos en la reserva.
     * (Reasignar Recurso en la Reserva)
     * @return String
     */
    String edit();

    /**
     * Función de Navegación a la Pagina Edit.jsp
     * @return String
     */
    String editSetup();

    /**
     * Obtiene una Reserva con el id correspondiente.
     * @param id
     * @return Reserva
     */
    Reserva findReserva(Integer id);

    /**
     * Función para Transformar la Reserva representada a una forma que pueda
     * ser transmitida en los jsps.
     * @return Map<Object, String>
     */
    Map<Object, String> getAsString();

    /**
     * Getter de la Cancelacion de la Reserva Representada.
     * @return Cancelacion[]
     */
    Cancelacion[] getCancelacionCollectionOfReserva();

    /**
     * Getter del Administrador de Entidades.
     * @return EntityManager
     */
    EntityManager getEntityManager();

    int getItemCount();

    int getItemMax();

    /**
     * Getter del atributo Recursos.
     * @return List<Recurso>
     */
    List<Recurso> getRecursos();

    /**
     * Función para obtener los recursos relacionados al tipo de recurso
     * correspondiente a la reserva representada.
     * @return SelectItem[]
     */
    SelectItem[] getRecursosAvailableSelectMany();

    /**
     * Getter de la Reserva Representada.
     * @return Reserva
     */
    Reserva getReserva();

    /**
     * Getter de Reservas (atributo local).
     * @return List<Reserva>
     */
    List<Reserva> getReservas();

    /**
     * Getter de todas las Reservas (de la Base de Datos)
     * @param all
     * @return List<Reserva>
     */
    List<Reserva> getReservas(boolean all);

    /**
     * Obtiene las Reservas Disponibles (de reservas).
     * @return
     */
    SelectItem[] getReservasAvailableSelectMany();

    /**
     * Obtiene la Reserva Disponible (de reservas).
     * @return
     */
    SelectItem[] getReservasAvailableSelectOne();

    /**
     * Getter del Uso-Retiro de la Reserva Representada.
     * @return Usoretiro[]
     */
    Usoretiro[] getUsoretiroCollectionOfReserva();

    /**
     * Función de Navegación a la Pagina List.jsp
     * @return String
     */
    String listSetup();

    /**
     * Borra la referencia al objeto Representado (Borrado sin persistencia).
     * @param resetFirstItem
     */
    void reset(boolean resetFirstItem);

    /**
     * Setter de la Cancelacion de la Reserva Representada.
     * @param cancelacionCollection
     */
    void setCancelacionCollectionOfReserva(Cancelacion[] cancelacionCollection);

    /**
     * Setter de la lista de Reserva atributo.
     * @param lista
     */
    void setReservas(List<Reserva> lista);

    /**
     * Setter del Uso-Retiro de la Reserva Representada.
     * @param usoretiroCollection
     */
    void setUsoretiroCollectionOfReserva(Usoretiro[] usoretiroCollection);

    /**
     * Función que Vincula y Valida JSP con la Reserva Representada.
     * @param facesContext
     * @param component
     * @param value
     */
    void validateCreate(FacesContext facesContext, UIComponent component, Object value);

}
